home *** CD-ROM | disk | FTP | other *** search
/ Chip 2004 August / CHIP_CD_2004-08.iso / software / amc / amc_install.exe / {app} / Scripts / DVDFR.ifs < prev    next >
Encoding:
Text File  |  2004-03-20  |  13.1 KB  |  392 lines

  1. // GETINFO SCRIPTING
  2. // DVDFR.com import with picture
  3.  
  4. (***************************************************
  5.  *  Movie importation script for:                  *
  6.  *                DVDFR.com, http://www.dvdfr.com  *
  7.  *                                                 *
  8.  *  (c) 2002-2004 Antoine Potten  software@antp.be *
  9.  *  Improved by Fabrice FERT :                     *
  10.  *   - more fields filled                          *
  11.  *                                                 *
  12.  *  For use with Ant Movie Catalog 3.4.1           *
  13.  *    (there is a bug in the 3.4.0 that prevents   *
  14.  *     from using this script without serious      *
  15.  *     problems. Please upgrade if you have an     *
  16.  *     old version)                                *
  17.  *  www.antp.be/software/moviecatalog              *
  18.  *                                                 *
  19.  *  This program is free software; you can         *
  20.  *  redistribute it and/or modify it under the     *
  21.  *  terms of the GNU General Public License as     *
  22.  *  published by the Free Software Foundation;     *
  23.  *  either version 2 of the License, or (at your   *
  24.  *  option) any later version.                     *
  25.  ***************************************************)
  26.  
  27. program DVDFR;
  28. const
  29.   MustImportBitrate = False; // set this to True if you want to take the bitrate information from the site
  30.   MustImportDescr = True;
  31.   BaseURL = 'http://www.dvdfr.com';
  32. //  BaseURL = 'http://dvdfr.solexine.fr';
  33. var
  34.   MovieName: string;
  35.  
  36. function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer;
  37. var
  38.   i: Integer;
  39. begin
  40.   result := -1;
  41.   if StartAt < 0 then
  42.     StartAt := 0;
  43.   for i := StartAt to List.Count-1 do
  44.     if Pos(Pattern, List.GetString(i)) <> 0 then
  45.     begin
  46.       result := i;
  47.       Break;
  48.     end;
  49. end;
  50.  
  51. procedure AnalyzePage(Address: string);
  52. var
  53.   Page: TStringList;
  54.   LineNr: Integer;
  55.   Line, Tags, Caption: string;
  56.   BeginPos, EndPos: Integer;
  57. begin
  58.   Line := GetPage(Address);
  59.   if Pos('<title>Dvdfr.com - Recherche DVDFr', Line) > 0 then
  60.   begin
  61.     PickTreeClear;
  62.     if Pos('Vos critΦres de recherche n''ont produit aucun rΘsultat.', Line) = 0 then
  63.     begin
  64.       Page := TStringList.Create;
  65.       EndPos := Pos('TITLE="Page prΘcΘdente"', Line) + 5;
  66.       if EndPos > 5 then
  67.       begin
  68.         BeginPos := EndPos - 70;
  69.         Tags := Copy(Line, BeginPos, EndPos - BeginPos);
  70.         BeginPos := Pos('="..', Tags) + 4;
  71.         EndPos := Pos('" TITLE', Tags);
  72.         PickTreeAdd('Page prΘcΘdente', BaseURL + Copy(Tags, BeginPos, EndPos - BeginPos));
  73.       end;
  74.       EndPos := Pos('TITLE="Page suivante"', Line) + 5;
  75.       if EndPos > 5 then
  76.       begin
  77.         BeginPos := EndPos - 70;
  78.         Tags := Copy(Line, BeginPos, EndPos - BeginPos);
  79.         BeginPos := Pos('="..', Tags) + 4;
  80.         EndPos := Pos('" TITLE', Tags);
  81.         PickTreeAdd('Page suivante', BaseURL + Copy(Tags, BeginPos, EndPos - BeginPos));
  82.       end;
  83.       BeginPos := Pos('<table class="tableSearchResult"', Line);
  84.       Delete(Line, 1, BeginPos + Length(Tags) - 1);
  85.       BeginPos := Pos('</TR>', Line);
  86.       Delete(Line, 1, BeginPos + 5);
  87.       EndPos := Pos('</table>', Line);
  88.       Delete(Line, EndPos, Length(Line));
  89.       while Pos('<TR', Line) > 0 do
  90.       begin
  91.         BeginPos := Pos('<TR', Line);
  92.         EndPos := Pos('</TR>', Line);
  93.         Tags := Copy(Line, BeginPos, EndPos - BeginPos);
  94.         if Pos('CLASS="tableHeaderLine"', Tags) > 0 then
  95.         begin // "Letter"
  96.           EndPos := Pos('</span>', Tags);
  97.           PickTreeAdd('Films commenτant par "' + Copy(Tags, EndPos - 1, 1) + '" :', '');
  98.         end else
  99.         begin // Movie
  100.           Page.Text := Tags;
  101.           Tags := Page.GetString(2);
  102.           Delete(Tags, 1, 1);
  103.           BeginPos := Pos('="..', Tags) + 4;
  104.           EndPos := Pos('">', Tags);
  105.           Address := Copy(Tags, BeginPos, EndPos - BeginPos);
  106.           HTMLRemoveTags(Tags);
  107.           Caption := Trim(Tags);
  108.           Tags := Page.GetString(3);
  109.           Delete(Tags, 1, 1);
  110.           HTMLRemoveTags(Tags);
  111.           Tags := Trim(Tags);
  112.           if Tags <> ' ' then
  113.             Caption := Caption + ' (' + Tags + ')';
  114.           Tags := Page.GetString(4);
  115.           Delete(Tags, 1, 1);
  116.           HTMLRemoveTags(Tags);
  117.           Tags := Trim(Tags);
  118.           if Tags <> ' ' then
  119.             Caption := Caption + ', ' + Tags;
  120.           PickTreeAdd(Caption, BaseURL + Address);
  121.         end;
  122.         Delete(Line, 1, Pos('</TR>', Line) + 5);
  123.       end;
  124.       Page.Free;
  125.     end;
  126.     if PickTreeExec(Address) then
  127.     begin
  128.       AnalyzePage(Address);
  129.     end;
  130.   end else
  131.   if Pos('<title>Dvdfr.com - Fiche DVD', Line) > 0 then
  132.   begin
  133.     SetField(fieldURL, Address);
  134.     AnalyzeMoviePage(Line);
  135.   end;
  136. end;
  137.  
  138. procedure AnalyzeMoviePage(PageContents: string);
  139. var
  140.   Line, Value: string;
  141.   LineNr, BeginPos, EndPos, BeginPos2, EndPos2, i: Integer;
  142.   Page: TStringList;
  143. begin
  144.   // Picture
  145.   BeginPos := Pos('src="../images/dvd/cover', PageContents);
  146.   EndPos := Pos('<div class="dvd_categorie">', PageContents);
  147.   Line := Copy(PageContents, BeginPos, EndPos - BeginPos);
  148.   EndPos := Pos('" ', Line);
  149.   Value := Copy(Line, 8, EndPos - 8);
  150.   GetPicture(BaseURL + Value, False);
  151.   // Category
  152.   BeginPos := Pos('<A class="home_a" TITLE="Rechercher les autres films de mΩme catΘgorie"', PageContents);
  153.   EndPos := Pos('<br><img src="../images/filet_categoriedvd.gif"', PageContents);
  154.   Value := Copy(PageContents, BeginPos, EndPos - BeginPos);
  155.   HTMLRemoveTags(Value);
  156.   SetField(fieldCategory, Trim(AnsiMixedCase(AnsiLowerCase(Value), ' ')));
  157.   //
  158.   Page := TStringList.Create;
  159.   BeginPos := Pos('<!-- Center main area -->', PageContents);
  160.   EndPos := Pos('<IMG SRC="../images/tit_pepins.gif"', PageContents);
  161.   Page.Text := Copy(PageContents, BeginPos, EndPos);
  162.   // Titles
  163.   LineNr := FindLine('<div class="dvd_title">', Page, 0);
  164.   if LineNr > -1 then
  165.   begin
  166.     Value := Trim(Page.GetString(LineNr + 1));
  167.     HTMLRemoveTags(Value);
  168.     SetField(fieldOriginalTitle, Value);
  169.     Value := Trim(Page.GetString(LineNr));
  170.     HTMLRemoveTags(Value);
  171.     Value := AnsiUpFirstLetter(AnsiLowerCase(Value));
  172.     if GetField(fieldOriginalTitle) = '' then
  173.       SetField(fieldOriginalTitle, Value)
  174.     else
  175.       SetField(fieldTranslatedTitle, Value);
  176.     // Country
  177.     Line := Page.GetString(LineNr + 2);
  178.     BeginPos := Pos('">', Line) + 2;
  179.     EndPos := Pos(' , ', Line);
  180.     Value := Copy(Line, BeginPos, EndPos - BeginPos);
  181.     SetField(fieldCountry, Value);
  182.     BeginPos := EndPos + 3;
  183.     // Year
  184.     EndPos := Pos('<br>', Line);
  185.     Value := Copy(Line, BeginPos, EndPos - BeginPos);
  186.     SetField(fieldYear, Value);
  187.     // Producer
  188.     Delete(Line, 1, EndPos - 1);
  189.     HTMLRemoveTags(Line);
  190.     SetField(fieldProducer, Line);
  191.   end;
  192.   // Note
  193.   LineNr := FindLine('/images/vote_dvdfr.gif', Page, LineNr);
  194.   if LineNr > -1 then
  195.   begin
  196.     Value := Trim(Page.GetString(LineNr));
  197.     HTMLRemoveTags(Value);
  198.     Value := StringReplace(Value, ' ', '');
  199.     EndPos := Pos(',', Value);
  200.     Line := value;
  201.     if EndPos > 0 then
  202.       Line := Copy(Value, 1, EndPos - 1);
  203.     SetField(fieldRating, Line);
  204.   end;
  205.   // Description
  206.   if MustImportDescr then
  207.   begin
  208.     LineNr := FindLine('<div class="dvd_subtitle">Synopsis</div>', Page, LineNr);
  209.     if LineNr > -1 then
  210.     begin
  211.       LineNr := LineNr + 1;
  212.       Line := Trim(Page.GetString(LineNr));
  213.       Value := '';
  214.       while (Pos('</div>', Line) = 0) and (Line <> '') do
  215.       begin
  216.         Value := Value + Line + ' ';
  217.         LineNr := LineNr + 1;
  218.         Line := Trim(Page.GetString(LineNr));
  219.       end;
  220.       Value := Value + Line + ' ';
  221.       HTMLRemoveTags(Value);
  222.       SetField(fieldDescription, Value);
  223.     end;
  224.   end;
  225.   // Director
  226.   LineNr := FindLine('<div class="dvd_subtitle">RΘalisation</div>', Page, LineNr);
  227.   if LineNr > -1 then
  228.   begin
  229.     Value := Trim(Page.GetString(LineNr + 1));
  230.     HTMLRemoveTags(Value);
  231.     SetField(fieldDirector, Value);
  232.   end;
  233.   // Actors
  234.   LineNr := FindLine('<div class="dvd_subtitle">Avec...</div>', Page, LineNr);
  235.   if LineNr > -1 then
  236.   begin
  237.     Value := StringReplace(Trim(Page.GetString(LineNr + 1)), '<br>', ',');
  238.     HTMLRemoveTags(Value);
  239.     SetField(fieldActors, Value);
  240.   end;
  241.   // Media Label - Reference
  242.   LineNr := FindLine('<div class="dvd_subtitle">RΘfΘrence</div>', Page, LineNr);
  243.   if LineNr > -1 then
  244.   begin
  245.     Value := Trim(Page.GetString(LineNr + 1));
  246.     HTMLRemoveTags(Value);
  247.     SetField(fieldMedia, Value);
  248.   end;
  249.   // Length
  250.   LineNr := FindLine('<img alt="DurΘe"', Page, LineNr);
  251.   if LineNr > -1 then
  252.   begin
  253.     Line := Page.GetString(LineNr + 1);
  254.     BeginPos := Pos('>', Line) + 1;
  255.     EndPos := Pos(' min', Line);
  256.     Value := Copy(Line, BeginPos, EndPos - BeginPos);
  257.     SetField(fieldLength, Value);
  258.   end;
  259.   // Discs
  260.   LineNr := FindLine('<img alt="Nombre de disques"', Page, LineNr);
  261.   if LineNr > -1 then
  262.   begin
  263.     Line := Page.GetString(LineNr + 1);
  264.     BeginPos := Pos('>', Line) + 1;
  265.     EndPos := Pos('</', Line);
  266.     Value := Copy(Line, BeginPos, EndPos - BeginPos);
  267.     SetField(fieldDisks, Value);
  268.   end;
  269.   // Bitrate
  270.   if MustImportBitrate then
  271.   begin
  272.     LineNr := FindLine('<img alt="Bitrate moyen"', Page, LineNr);
  273.     if LineNr > -1 then
  274.     begin
  275.       Line := Page.GetString(LineNr + 1);
  276.       BeginPos := Pos('<td>', Line) + 4;
  277.       EndPos := Pos(' ', Line);
  278.       Value := Copy(Line, BeginPos, EndPos - BeginPos);
  279.       Value := StringReplace(Value, ',', '') + '0';
  280.       SetField(fieldVideoBitrate, Value);
  281.     end;
  282.   end;
  283.   // Media type
  284.   LineNr := FindLine('<img alt="Format DVD"', Page, LineNr);
  285.   if LineNr > -1 then
  286.   begin
  287.     Line := Page.GetString(LineNr + 1);
  288.     BeginPos := Pos('>', Line) + 1;
  289.     EndPos := Pos('</', Line);
  290.     Value := Copy(Line, BeginPos, EndPos - BeginPos);
  291.     SetField(fieldMediaType, Value);
  292.   end;
  293.   // Comments
  294.   Line := Page.Text;
  295.   BeginPos := Pos('</span><br>', Line) + 12;
  296.   Delete(Line, 1, BeginPos);
  297.   EndPos := Pos('<br>', Line);
  298.   Value := Copy(Line, 1, EndPos - 1);
  299.   HTMLRemoveTags(Value);
  300.   Value := 'SupplΘments:' + #13#10 + Trim(Value);
  301.   SetField(fieldComments, Value);
  302.   // Video format
  303.   LineNr := FindLine('title="Format vidΘo"', Page, LineNr);
  304.   if LineNr > -1 then
  305.   begin
  306.     Line := Page.GetString(LineNr + 2);
  307.     BeginPos := Pos('alt="', Line) + 17;
  308.     EndPos := Pos('" title=', Line);
  309.     Value := Copy(Line, BeginPos, EndPos - BeginPos);
  310.     SetField(fieldResolution, Value);
  311.   end;
  312.   // Zone
  313.   LineNr := FindLine('title="Zone(s) du DVD"', Page, LineNr);
  314.   if LineNr > -1 then
  315.   begin
  316.     Line := Page.GetString(LineNr + 2);
  317.     BeginPos := Pos('alt="', Line) + 5;
  318.     EndPos := Pos('" title=', Line);
  319.     Value := 'DVD ' + Copy(Line, BeginPos, EndPos - BeginPos);
  320.     SetField(fieldVideoFormat, Value);
  321.   end;
  322.   // Standard
  323.   LineNr := FindLine('title="Standard vidΘo du DVD"', Page, LineNr);
  324.   if LineNr > -1 then
  325.   begin
  326.     Line := StringReplace(Trim(Page.GetString(LineNr + 2)), #9, '');
  327.     HTMLRemoveTags(Line);
  328.     Value := Value + ' - Standard ' + Line;
  329.     SetField(fieldVideoFormat, Value);
  330.   end;
  331.   // Audio format
  332.   LineNr := FindLine('title="SpΘcifications audio"', Page, LineNr);
  333.   if LineNr > -1 then
  334.   begin
  335.     BeginPos := LineNr + 2;
  336.     LineNr := FindLine('</table></td></tr>', Page, LineNr);
  337.     if LineNr > -1 then
  338.     begin
  339.       EndPos := LineNr;
  340.       Value := '';
  341.       Line := 'DVD ';
  342.       for i := BeginPos to EndPos do
  343.       begin
  344.         BeginPos2 := Pos('<small>', Page.GetString(i));
  345.         EndPos2 := Pos('</small>', Page.GetString(i));
  346.         if ((BeginPos2 > 0) and (EndPos2 > 0)) then
  347.         begin
  348.             if not(Value = '') then
  349.                 Value := Value + ' - ';
  350.             Value := Value + Copy(Page.GetString(i), BeginPos2 + 7, EndPos2 - (BeginPos2 + 7));
  351.         end;
  352.         BeginPos2 := Pos('alt="', Page.GetString(i));
  353.         EndPos2 := Pos('" title="', Page.GetString(i));
  354.         if ((BeginPos2 > 0) and (EndPos2 > 0)) then
  355.         begin
  356.             if not(Line = 'DVD ') then
  357.                 Line := Line + ' - ';
  358.             Line := Line + Copy(Page.GetString(i), BeginPos2 + 5, EndPos2 - (BeginPos2 + 5));
  359.         end;
  360.       end;
  361.       SetField(fieldAudioFormat, Line);
  362.       SetField(fieldLanguages, Value);
  363.     end;
  364.   end;
  365.   // Sous-titres
  366.   LineNr := FindLine('title="Sous-titres disponibles"', Page, LineNr);
  367.   if LineNr > -1 then
  368.   begin
  369.     Line := StringReplace(Trim(Page.GetString(LineNr + 3)), #9, '');
  370.     HTMLRemoveTags(Line);
  371.     SetField(fieldSubtitles, Line);
  372.   end;
  373.   //
  374.   Page.Free;
  375.   DisplayResults;
  376. end;
  377.  
  378. begin
  379.   if CheckVersion(3,4,1) then
  380.   begin
  381.     MovieName := GetField(fieldOriginalTitle);
  382.     if MovieName = '' then
  383.       MovieName := GetField(fieldTranslatedTitle);
  384.     if Input('DVDFR.com Import', 'Entrez le titre du film :', MovieName) then
  385.     begin
  386.       AnalyzePage(BaseURL + '/search/search.php?multiname='+UrlEncode(MovieName));
  387.     end;
  388.   end else
  389.     ShowMessage('Ce script requiert la version 3.4.1 ou supΘrieure de Ant Movie Catalog.');
  390. end.
  391.  
  392.